package com.personalink.common.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 聊天响应DTO
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ChatResponse {
    
    /**
     * 响应ID
     */
    private String responseId;
    
    /**
     * 会话ID
     */
    private String sessionId;
    
    /**
     * 当前人格ID
     */
    private String personaId;
    
    /**
     * 响应内容
     */
    private MultimodalContent content;
    
    /**
     * 更新的记忆ID列表
     */
    private List<String> memories;
    
    /**
     * 响应时间戳
     */
    private LocalDateTime timestamp;
    
    /**
     * 处理耗时（毫秒）
     */
    private Long processingTime;
    
    /**
     * 情感状态
     */
    private String emotion;
    
    /**
     * 置信度
     */
    private Double confidence;
    
    /**
     * 扩展信息
     */
    private Map<String, Object> metadata;
    
    /**
     * 多模态内容
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class MultimodalContent {
        
        /**
         * 文本内容
         */
        private String text;
        
        /**
         * 图像数据（Base64编码）
         */
        private String image;
        
        /**
         * 语音数据（Base64编码或URL）
         */
        private String voice;
        
        /**
         * 虚拟形象状态
         */
        private AvatarState avatar;
        
        /**
         * 富文本内容（HTML格式）
         */
        private String richText;
        
        /**
         * 附件列表
         */
        private List<Attachment> attachments;
    }
    
    /**
     * 虚拟形象状态
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class AvatarState {
        
        /**
         * 表情状态
         */
        private String expression;
        
        /**
         * 动作状态
         */
        private String action;
        
        /**
         * 自定义头像URL
         */
        private String customAvatar;
        
        /**
         * 动画配置
         */
        private Map<String, Object> animation;
    }
    
    /**
     * 附件信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Attachment {
        
        /**
         * 附件类型
         */
        private String type;
        
        /**
         * 附件URL或Base64数据
         */
        private String data;
        
        /**
         * 附件名称
         */
        private String name;
        
        /**
         * 附件大小
         */
        private Long size;
        
        /**
         * MIME类型
         */
        private String mimeType;
    }
}